import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class JeuPenduGUI extends JFrame implements ActionListener {
   //attributs
    final static int NUM_IMAGES = 12;   
    final static int MAX_COUPS  = 10;   
    final static int FEN_WIDTH  = 425;   
    final static int FEN_HEIGHT = 575;   
    
    private JeuPendu jeuPendu;
    private int nbCoupsLoupes;
    private ImageIcon[] images = new ImageIcon[NUM_IMAGES];    
    private JLabel labelPenduIcon;
    private JLabel labelMotCrypte;
    private JProgressBar progressBar;

  //constructeur  
  public JeuPenduGUI() {
    // pour terminer l'application lorsque la fen�tre se ferme
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // centrons la fen�tre
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    setBounds( (d.width - FEN_WIDTH) / 2,
               (d.height - FEN_HEIGHT) / 2, FEN_WIDTH, FEN_HEIGHT);
   
    try {
      // cr�ation de l'objet qui d�tient la logique du jeu
     java.net.URL dicoURL = ClassLoader.getSystemResource("motsPendu.txt");
     jeuPendu = new JeuPendu(dicoURL.openStream()); 
    }
    catch(Exception e) {
      JOptionPane.showMessageDialog(null,e); 
      new java.io.FileNotFoundException("motsPendu.txt");
    }
    
    ImageIcon[] images = new ImageIcon[8];
    java.net.URL iconURL = 
        ClassLoader.getSystemResource("../images/image_1.jpg");
      images[0] = new ImageIcon(iconURL);


    nbCoupsLoupes = 0;

    // A FAIRE chager les images du pendu
    JOptionPane.showMessageDialog(null," A FAIRE charger les images du pendu"); 

    
    // ajoute un menu
    setJMenuBar(getMenu());

    // initialise le contenu de la fen�tre
    initContentPane();
  
  }
  
   private JMenuBar getMenu() {
    JMenuBar barreDeMenu = new JMenuBar();
        
    JMenu fichier        = new JMenu("Fichier");
    JMenuItem mnQuitter  = new JMenuItem("Quitter");
    mnQuitter.addActionListener(this);  
    mnQuitter.setActionCommand("Quitter");

    fichier.add(mnQuitter);
    
    barreDeMenu.add(fichier);
    return barreDeMenu;
  }

  private void initContentPane(){
   //1: cr�ation des objets
    JPanel panelVue          = new JPanel();
    JPanel panelControleur   = new JPanel();
    JPanel panelVueMotCrypte = new JPanel();
    JPanel panelProgression  = new JPanel();
    this.labelPenduIcon      = new JLabel();
    this.labelMotCrypte      = new JLabel();
    this.progressBar         = new JProgressBar(0, MAX_COUPS);
   
   //2: gestion de leur positionnement
    Container mainPanel = getContentPane();
    mainPanel.setLayout(null);
    mainPanel.add(panelVue);
    panelVue.setBounds(0,20,300,440);
      //taille image : w=282 h:352
    mainPanel.add(panelControleur);
    panelControleur.setBounds(310,10,getWidth()-330,getHeight()-60);
  
    panelVue.setLayout(new BorderLayout());
    panelVue.add("Center",labelPenduIcon);
    panelVue.add("South",panelVueMotCrypte);
    panelVueMotCrypte.setLayout(new GridLayout(2,1));
    panelVueMotCrypte.add(labelMotCrypte);
    panelVueMotCrypte.add(panelProgression);
    panelProgression.add(progressBar);    

   //3 : configuration des composants
    labelPenduIcon.setHorizontalAlignment(JLabel.CENTER);
    labelPenduIcon.setVerticalAlignment(JLabel.CENTER);
    labelPenduIcon.setText("");
    
    // A FAIRE :
    // donner une fonte "Arial", avec une taille de 20
    // au labelMotCrypte (voir setFont)
    
    labelMotCrypte.setHorizontalAlignment(JLabel.CENTER);
    labelMotCrypte.setVerticalAlignment(JLabel.CENTER);
    progressBar.setStringPainted(true);
    
    //donnons une taille. On n'utilise pas progressBar.setSize car
    //progressBar est g�r� par un FlowLayout qui utilise
    //progressBar.getPreferredSize pour tailler et positionner
    // le composant.
    progressBar.setPreferredSize(new Dimension(280, 20));
    progressBar.setValue(0);

    //nous placons des boutons dans un panel
    //dont le contenu est g�r� par un GrdiLayout
    //de 13 lignes et 2 colonnes.
   panelControleur.setLayout(new GridLayout(13,2));
    for (char c='A'; c <= 'Z'; c++) {
      JButton bt = new JButton(c + "");
      panelControleur.add(bt);
    }   

    changeVueMotCrypte();
    changeVueProgression();
    
   //4: Associer un gestionnaire d'�v�nement aux composantx
   //   => concernant les boutons, A FAIRE dans leur boucle de cr�ation
   
 }
 
 
 private void changeVueDuPendu() {
   // A FAIRE
 }
 
 private void  changeVueMotCrypte() {
   // A FAIRE
   labelMotCrypte.setText("A FAIRE");
 }
 
 
 private void  changeVueProgression(){
   // A FAIRE
 }
 
 public void actionPerformed(ActionEvent e) {
    // System.out.println("w: " + getWidth() +"  h: "+ getHeight());
    String action = e.getActionCommand();
    if ("NouveauJeu".equals(action)){
      JOptionPane.showMessageDialog(null, "Nouveau jeu -> A FAIRE");
      validate();
    }
    else if ("Quitter".equals(action)){
      JOptionPane.showMessageDialog(null, "Quitter -> A FAIRE");
      validate();
    }
    else if ("ChoixLettre".equals(action)) {
      JButton b = (JButton) e.getSource();
      JOptionPane.showMessageDialog(null, "Action d'un bouton -> A FAIRE \n ("+ b+")");
    }
  }
  
  static public void main(String[] a){
    JeuPenduGUI pendu = new JeuPenduGUI();
    pendu.setResizable(false);
    pendu.setVisible(true);
  }
}
